#元组
info = ()
info1 = tuple()
print(info)
print(info1)

info2 = (11,22,33,44)
print(info2)
info3 = ("55")#没加,是str类型
print(type(info3))
info3 = ("55",)#加了,是tuple类型
print(type(info3))
info4 = 1,2,3,4
print(type(info4))



#元组元素查询：索引
info = (11,"aaa",1.88)
print(info[2])
#下标不存在报错
#print(info[4])



#元组元素查询：元素统计
info = (1,2,3,2)
print(info.count(2))
print(info.count(3))
print(info.count(4))


#元组其他应用：数据交换
num1 = 100
num2 = 200
#方式1：找第三个变量，进行交换
tmp = num1
num1 = num2
num2 = tmp
print("此时num1的值：",num1)
print("此时num2的值：",num2)

#方法2：直接借助于python元组类型的数据直接替换
aa = 200
bb = 100
num1 = aa
num2 = bb
num1,num2 = num2,num1
print("此时的num1的值：",num1)
print("此时的num2的值：",num2)


#字典
info = {}
info1 = dict()
print(type(info),type(info1))
print(info)
#非空字典
info2 = {"name":"张三","age":22,"height":1.88}
print(info2)
print(type(info2))


#字典新增或修改值
info = {"name":"张三"}
info["name"] = "李四"
print(info)
info["age"] = 22
print(info)

#字典删除值
info = {'name':'李四','age':'22'}
info.pop("age")
print(info)
#键存在直接删除对应键和值，键不存在报错
#info.pop("sex")


#字典中取值
info = {
    "name":"tom",
    "age":18,
    "gender":"男",
    "hobby":{"read":"小说","sport":["篮球","足球"]}
}
print(info["age"])
print(info.get("age"))
#None表示键值不存在
print(info.get("aa"))
#组合:从外部一层一层获取递进
print(info["hobby"]["sport"][1])
print(info.get("hobby").get("sport")[1])


#字典的合并/新增
dict1 = {"name":"张三","age":18}
dict2 = {"height":1.88}
dict1.update(dict2)
print(dict1)


#字典的遍历!
info = {
    "name": "tom",
    "age": 18,
    "gender": "男"
}
# 遍历获取字典中所有键
for i in info.keys():
    print(f"字典的键是：{i}")
# 遍历获取字典中所有值
for i in info.values():
    print(f"字典的值是：{i}")
# 遍历获取字典的键和值
for k, v in info.items():
    print(f"{k} = {v}")


#集合
# 1.定义空集合
info = set()
print(info)
# 2.集合中添加元素："a"
info.add("a")
info.add("b")
print(info)
# 定义非空字符串
var = "abcdeabdcdf"
# 3.打印非重复的元素
print(set(var)) # 转换为集合去重 # {'c', 'f', 'e', 'a', 'b', 'd'}
tmp = list(set(var)) # 再转换为列表
tmp.sort() # 再进行排序
print(tmp) # ['a', 'b', 'c', 'd', 'e', 'f']
print("".join(tmp)) # 还原成字符串：abcdef





#序列类型-通用操作
#3.1切片操作
# 作用：按照指定要求获取一段数据
# 定义非空字符串
name = "abcdefgh"
# 获取cde
# print(name[2:5])
# print(name[2:5:1])
# print(name[‐6:‐3])
# print(name[‐6:‐3:1])
# 获取defgh的字符
# print(name[3:8])
# print(name[3:]) # 结束下标不写，默认从开始下标到结尾
# print(name[‐5:])
# 获取abc的字符
# 获取ace的字符
#print(name[0:5:2]) # 取出0 、2 、4下标对应元素
# print(name[:5:2]) # 开始下标不写，默认从第一个元素开始
# # 获取hgfedcba
# print(name[::‐1])


#3.2 序列长度
# 定义非空字符串
info = "abcdefgh"
info1 = "Hello Python"
# 统计字符元素个数（长度）
print(len(info)) # 8
print(len(info1)) # 12
# 定义非空列表
info2 = [11, "aa", 1.88, (1, 2, 3), ["aa", "bb"]]
print(len(info2)) # 5
# 定义非空元组
info3 = (11, "aa", 1.88)
print(len(info3)) # 3
# 定义非空字典
info4 = {"name": "tom", "age": 18, "gender": "男"}
print(len(info4)) # 3
# 结论：
# 1.字典元素统计按照键值对统计



#3.3 清空序列
info2 = [11, "aa", 1.88, (1, 2, 3), ["aa", "bb"]]
# 清空列表数据
info2.clear()
# 查看原有列表
print(info2)
info4 = {"name": "tom", "age": 18, "gender": "男"}
# 清空字典数据
info4.clear()
# 查看原有字典
print(info4)
# 结论：只针对可变数据类型可以做清空



#3.5 综合案例
"""
需求：
参考项目的登录功能（登录时需要输入用户名、密码、验证码），至少设计3条测试用例
要求1：定义变量保存测试数据（包括不同测试数据对应的测试结果）
要求2：至少写出3种以上不同的数据格式
要求3：遍历测试数据并打印到控制台，数据格式“用户名：xxx 密码：xxx 验证码：xxx 期望结果：xxx”
"""
# 分析：①登录成功②用户名或密码错误③验证码错误
# 测试数据：
# 1.请求：用户名、密码、验证码
# 2.响应：预期结果
# 组装数据：每一种结果对应的场景放到一个序列里面
# 案例：记录登录功能测试用例数据
# 思考：测试用例？ 登录成功、用户名或密码错误、验证码错误
# 存放的数据：用户名、密码、验证码、预期结果
# 定义变量：列表
login_data1 = [
["13800000001", "123456", "8888", "登录成功"],
["13800000001", "1234", "8888", "密码错误"],
["13800000001", "123456", "0000", "验证码错误"]
]
# 定义变量：元组
login_data2 = (
("13800000001", "123456", "8888", "登录成功"),
("13800000001", "1234", "8888", "密码错误"),
("13800000001", "123456", "0000", "验证码错误")
)
# 定义变量：列表元组
login_data3 = [
("13800000001", "123456", "8888", "登录成功"),
("13800000001", "1234", "8888", "密码错误"),
("13800000001", "123456", "0000", "验证码错误")
]
# 定义变量：列表字典
login_data4 = [
{"username": "13800000001", "password": "123456", "code": "8888", "result": "登录成功"},
{"username": "13800000001", "password": "666666", "code": "8888", "result": "密码错误"},
{"username": "13800000001", "password": "123456", "code": "0000", "result": "验证码错误"}
]
# 遍历数据3
for j in login_data3:
# j = ("13800000001", "123456", "8888", "登录成功")
    print(f"用户名：{j[0]} 密码：{j[1]} 验证码：{j[2]} 期望结果：{j[3]}")
# 遍历数据4
for i in login_data4:
# print(i) # i = {'username': '13800000001', 'password': '123456', 'code': '8888','result': '登录成功'}
# print(i.get("username")) # 13800000001
    print(f"用户名：{i.get('username')} 密码：{i.get('password')} 验证码：{i.get('code')} 期望结果：{i.get('result')}")
# 构造测试数据要求掌握3和4